import java.util.*;

/**
 * @author LKQ
 * @date 2022/1/4 10:26
 * @description 无法AC，超时
 */
public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        List<List<String>> orders = new ArrayList<>();
        List<String> l1 = new ArrayList<>();
        l1.add("David");
        l1.add("3");
        l1.add("Ceviche");
        List<String > l2 = new ArrayList<>();
        l2.add("Corina");
        l2.add("10");
        l2.add("Beef Burrito");
        List<String > l3 = new ArrayList<>();
        l3.add("David");
        l3.add("3");
        l3.add("Fried Chicken");
        List<String> l4 = new ArrayList<>();
        l4.add("Carla");
        l4.add("5");
        l4.add("Water");
        List<String> l5 = new ArrayList<>();
        l5.add("Carla");
        l5.add("5");
        l5.add("Ceviche");
        List<String> l6 = new ArrayList<>();
        l6.add("Rous");
        l6.add("3");
        l6.add("Ceviche");
        orders.add(l1);
        orders.add(l2);
        orders.add(l3);
        orders.add(l4);
        orders.add(l5);
        orders.add(l6);
        solution.displayTable(orders);
    }

    public List<List<String>> displayTable(List<List<String>> orders) {
        List<List<String>> ans = new ArrayList<>();
        List<String> foodItems = new ArrayList<>();
        List<Integer> tables = new ArrayList<>();
        for (List<String > list : orders) {
            if (!foodItems.contains(list.get(2))) {
                foodItems.add(list.get(2));
            }
            if (!tables.contains(Integer.parseInt(list.get(1)))) {
                tables.add(Integer.parseInt(list.get(1)));
            }
        }
        foodItems.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        tables.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });

        // start代表桌子号
        int start = 0;
        while (start < tables.size()) {
            List<String> rows = new ArrayList<>();
            // 当前桌号
            String table = String.valueOf(tables.get(start));
            rows.add(table);
            // 每桌的食物数号
            int n = 0;
            while (n < foodItems.size()) {
                int count = 0;
                String food = foodItems.get(n);
                for (List<String> temp : orders) {
                    if (temp.get(1).equals(table) && temp.get(2).equals(food) ) {
                        count++;
                    }
                }
                rows.add(String.valueOf(count));
                n++;
            }
            start++;
            ans.add(rows);
        }
        foodItems.add(0, "Table");
        ans.add(0, foodItems);
        return ans;
    }
}
